/**
 */
package tpi.obj3.planificador.planificador.impl;

import org.eclipse.emf.common.notify.Notification;

import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.InternalEObject;

import org.eclipse.emf.ecore.impl.ENotificationImpl;

import tpi.obj3.planificador.planificador.Aula;
import tpi.obj3.planificador.planificador.Clase;
import tpi.obj3.planificador.planificador.Materia;
import tpi.obj3.planificador.planificador.PlanificadorPackage;

/**
 * <!-- begin-user-doc -->
 * An implementation of the model object '<em><b>Clase</b></em>'.
 * <!-- end-user-doc -->
 * <p>
 * The following features are implemented:
 * <ul>
 *   <li>{@link tpi.obj3.planificador.planificador.impl.ClaseImpl#getInicio <em>Inicio</em>}</li>
 *   <li>{@link tpi.obj3.planificador.planificador.impl.ClaseImpl#getFin <em>Fin</em>}</li>
 *   <li>{@link tpi.obj3.planificador.planificador.impl.ClaseImpl#getMateria <em>Materia</em>}</li>
 *   <li>{@link tpi.obj3.planificador.planificador.impl.ClaseImpl#getAula <em>Aula</em>}</li>
 * </ul>
 * </p>
 *
 * @generated
 */
public class ClaseImpl extends ElementoImpl implements Clase
{
  /**
   * The default value of the '{@link #getInicio() <em>Inicio</em>}' attribute.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @see #getInicio()
   * @generated
   * @ordered
   */
  protected static final int INICIO_EDEFAULT = 0;

  /**
   * The cached value of the '{@link #getInicio() <em>Inicio</em>}' attribute.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @see #getInicio()
   * @generated
   * @ordered
   */
  protected int inicio = INICIO_EDEFAULT;

  /**
   * The default value of the '{@link #getFin() <em>Fin</em>}' attribute.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @see #getFin()
   * @generated
   * @ordered
   */
  protected static final int FIN_EDEFAULT = 0;

  /**
   * The cached value of the '{@link #getFin() <em>Fin</em>}' attribute.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @see #getFin()
   * @generated
   * @ordered
   */
  protected int fin = FIN_EDEFAULT;

  /**
   * The cached value of the '{@link #getMateria() <em>Materia</em>}' reference.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @see #getMateria()
   * @generated
   * @ordered
   */
  protected Materia materia;

  /**
   * The cached value of the '{@link #getAula() <em>Aula</em>}' reference.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @see #getAula()
   * @generated
   * @ordered
   */
  protected Aula aula;

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  protected ClaseImpl()
  {
    super();
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  @Override
  protected EClass eStaticClass()
  {
    return PlanificadorPackage.Literals.CLASE;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public int getInicio()
  {
    return inicio;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public void setInicio(int newInicio)
  {
    int oldInicio = inicio;
    inicio = newInicio;
    if (eNotificationRequired())
      eNotify(new ENotificationImpl(this, Notification.SET, PlanificadorPackage.CLASE__INICIO, oldInicio, inicio));
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public int getFin()
  {
    return fin;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public void setFin(int newFin)
  {
    int oldFin = fin;
    fin = newFin;
    if (eNotificationRequired())
      eNotify(new ENotificationImpl(this, Notification.SET, PlanificadorPackage.CLASE__FIN, oldFin, fin));
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public Materia getMateria()
  {
    if (materia != null && materia.eIsProxy())
    {
      InternalEObject oldMateria = (InternalEObject)materia;
      materia = (Materia)eResolveProxy(oldMateria);
      if (materia != oldMateria)
      {
        if (eNotificationRequired())
          eNotify(new ENotificationImpl(this, Notification.RESOLVE, PlanificadorPackage.CLASE__MATERIA, oldMateria, materia));
      }
    }
    return materia;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public Materia basicGetMateria()
  {
    return materia;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public void setMateria(Materia newMateria)
  {
    Materia oldMateria = materia;
    materia = newMateria;
    if (eNotificationRequired())
      eNotify(new ENotificationImpl(this, Notification.SET, PlanificadorPackage.CLASE__MATERIA, oldMateria, materia));
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public Aula getAula()
  {
    if (aula != null && aula.eIsProxy())
    {
      InternalEObject oldAula = (InternalEObject)aula;
      aula = (Aula)eResolveProxy(oldAula);
      if (aula != oldAula)
      {
        if (eNotificationRequired())
          eNotify(new ENotificationImpl(this, Notification.RESOLVE, PlanificadorPackage.CLASE__AULA, oldAula, aula));
      }
    }
    return aula;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public Aula basicGetAula()
  {
    return aula;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public void setAula(Aula newAula)
  {
    Aula oldAula = aula;
    aula = newAula;
    if (eNotificationRequired())
      eNotify(new ENotificationImpl(this, Notification.SET, PlanificadorPackage.CLASE__AULA, oldAula, aula));
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  @Override
  public Object eGet(int featureID, boolean resolve, boolean coreType)
  {
    switch (featureID)
    {
      case PlanificadorPackage.CLASE__INICIO:
        return getInicio();
      case PlanificadorPackage.CLASE__FIN:
        return getFin();
      case PlanificadorPackage.CLASE__MATERIA:
        if (resolve) return getMateria();
        return basicGetMateria();
      case PlanificadorPackage.CLASE__AULA:
        if (resolve) return getAula();
        return basicGetAula();
    }
    return super.eGet(featureID, resolve, coreType);
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  @Override
  public void eSet(int featureID, Object newValue)
  {
    switch (featureID)
    {
      case PlanificadorPackage.CLASE__INICIO:
        setInicio((Integer)newValue);
        return;
      case PlanificadorPackage.CLASE__FIN:
        setFin((Integer)newValue);
        return;
      case PlanificadorPackage.CLASE__MATERIA:
        setMateria((Materia)newValue);
        return;
      case PlanificadorPackage.CLASE__AULA:
        setAula((Aula)newValue);
        return;
    }
    super.eSet(featureID, newValue);
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  @Override
  public void eUnset(int featureID)
  {
    switch (featureID)
    {
      case PlanificadorPackage.CLASE__INICIO:
        setInicio(INICIO_EDEFAULT);
        return;
      case PlanificadorPackage.CLASE__FIN:
        setFin(FIN_EDEFAULT);
        return;
      case PlanificadorPackage.CLASE__MATERIA:
        setMateria((Materia)null);
        return;
      case PlanificadorPackage.CLASE__AULA:
        setAula((Aula)null);
        return;
    }
    super.eUnset(featureID);
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  @Override
  public boolean eIsSet(int featureID)
  {
    switch (featureID)
    {
      case PlanificadorPackage.CLASE__INICIO:
        return inicio != INICIO_EDEFAULT;
      case PlanificadorPackage.CLASE__FIN:
        return fin != FIN_EDEFAULT;
      case PlanificadorPackage.CLASE__MATERIA:
        return materia != null;
      case PlanificadorPackage.CLASE__AULA:
        return aula != null;
    }
    return super.eIsSet(featureID);
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  @Override
  public String toString()
  {
    if (eIsProxy()) return super.toString();

    StringBuffer result = new StringBuffer(super.toString());
    result.append(" (inicio: ");
    result.append(inicio);
    result.append(", fin: ");
    result.append(fin);
    result.append(')');
    return result.toString();
  }

} //ClaseImpl
